home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / pascal / tvtool2.zip / TVDIALOG.PAS < prev    next >
Pascal/Delphi Source File  |  1993-07-20  |  38KB  |  336 lines

  1. {*
  2. *
  3. *   Copyright (c) 1992,93 by Richard W. Hansen
  4. *
  5. *   This source code will compile.
  6. *   Full source code available to registered users.
  7. *
  8. *}
  9. (* This file was mangled by Mangler 1.10 (c) Copyright 1993 by Berend de Boer *)
  10.  UNIT TVDIALOG ;{$B+} {$X+} {$V-} {$I TVDEFS.INC} INTERFACE USES DOS , TVOBJECT , TVCONST , TVSTRING , TVTYPE ,
  11. {$IFDEF USE_NEW_FILE_DIALOG} STDDLG , {$ENDIF} APP , DIALOGS , DRIVERS , MEMORY , MSGBOX , OBJECTS , VIEWS ;
  12. CONST BARCHAR :CHAR ='▒';BARFILLCHAR :CHAR ='█';CONST BUTTONS :ARRAY [ 0 .. 3 ]  OF STRING [ 8 ] =('~Y~es', '~N~o',
  13. 'O~K~', '~C~ancel');COMMANDS :ARRAY [ 0 .. 3 ]  OF WORD =(CMYES , CMNO , CMOK , CMCANCEL );TITLES :ARRAY [ 0 .. 3 ]
  14.  OF STRING [ 11 ] =('Warning', 'Error', 'Information', 'Confirm');CONST MFMESSAGELINE =$1000 ;MFPAUSEBUTTON =$2000 ;
  15. MFPAUSECANCEL =MFPAUSEBUTTON + MFCANCELBUTTON ;MFOKPAUSECANCEL =MFOKCANCEL + MFPAUSEBUTTON ;CONST VLCURRENT =$0001 ;
  16. VLPREV =$0002 ;VLNEXT =$0003 ;VLMIN =$0004 ;VLMAX =$0005 ;VLLISTMAX =$0006 ;VLLISTMIN =$0007 ;
  17. {$IFDEF USE_NEW_FILE_DIALOG} TYPE PSEARCHREC =^TSEARCHREC ;DRIVELETTERS ='A'.. 'Z';DRIVESET =SET  OF DRIVELETTERS ;
  18. {$ENDIF} TYPE PBXRUNDIALOG =^TBXRUNDIALOG ;TBXRUNDIALOG =OBJECT (TDIALOG)MSG :PSTATICTEXT ;RUNSTATE :WORD ;
  19. PFFLAGS :WORD ;BTNROW :BYTE ;SBUTTON :PBUTTON ;CBUTTON :PBUTTON ;CONSTRUCTOR INIT (VAR BOUNDS :TRECT ;
  20. ATITLE :TTITLESTR ;AMESSAGE :STRING ;AOPTIONS :WORD ;BUTTONROW :BYTE );CONSTRUCTOR LOAD (VAR S :TSTREAM );
  21. PROCEDURE CHANGEMESSAGE (AMESSAGE :STRING );FUNCTION EXECUTE :WORD ;VIRTUAL;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );
  22. VIRTUAL;PROCEDURE PROCESS ;VIRTUAL;PROCEDURE STORE (VAR S :TSTREAM );END ;PBXPERCENTDIALOG =^TBXPERCENTDIALOG ;
  23. TBXPERCENTDIALOG =OBJECT (TBXRUNDIALOG)TOTAL :LONGINT ;COUNT :LONGINT ;STEP :WORD ;PCT :PSTATICTEXT ;BAR :PSTATICTEXT ;
  24. CONSTRUCTOR INIT (ATITLE :TTITLESTR ;AMESSAGE :STRING ;ATOTAL :LONGINT ;AOPTIONS :WORD );CONSTRUCTOR LOAD
  25. (VAR S :TSTREAM );PROCEDURE INCREMENT ;PROCEDURE INCREMENTBY (ASTEP :WORD );PROCEDURE STORE (VAR S :TSTREAM );END ;
  26. PBXPRINTDIALOG =^TBXPRINTDIALOG ;TBXPRINTDIALOG =OBJECT (TBXRUNDIALOG)CONSTRUCTOR INIT (ATITLE :TTITLESTR ;
  27. AMESSAGE :STRING ;AOPTIONS :WORD );END ;PBXLINKEDLINE =^TBXLINKEDLINE ;
  28. TBXLINKEDLINE =OBJECT (TINPUTLINE)LINKEVENT :WORD ;CONSTRUCTOR INIT (VAR BOUNDS :TRECT ;AMAXLEN :INTEGER ;
  29. EVENTCODE :WORD );CONSTRUCTOR LOAD (VAR S :TSTREAM );PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;PROCEDURE STORE
  30. (VAR S :TSTREAM );END ;PBXLINKEDBOX =^TBXLINKEDBOX ;TBXLINKEDBOX =OBJECT (TLISTBOX)LINKEVENT :WORD ;CONSTRUCTOR INIT
  31. (VAR BOUNDS :TRECT ;ANUMCOLS :WORD ;ASCROLLBAR :PSCROLLBAR ;EVENTCODE :WORD );CONSTRUCTOR LOAD (VAR S :TSTREAM );
  32. PROCEDURE FOCUSITEM (ITEM :INTEGER );VIRTUAL;PROCEDURE STORE (VAR S :TSTREAM );END ;
  33. PBXMESSAGEDIALOG =^TBXMESSAGEDIALOG ;TBXMESSAGEDIALOG =OBJECT (TDIALOG)SLIST :TBXUNSORTEDSTRINGCOLLECTION ;
  34. DOPTIONS :WORD ;CONSTRUCTOR INIT (AOPTIONS :WORD );PROCEDURE ADDMESSAGE (ST :STRING );FUNCTION EXECUTE :WORD ;VIRTUAL;
  35. END ;PBXLISTBOX =^TBXLISTBOX ;TBXLISTBOX =OBJECT (TLISTBOX)FUNCTION GETTEXT (ITEM :INTEGER ;MAXLEN :INTEGER ):STRING ;
  36. VIRTUAL;END ;PBXCHECKLISTBOX =^TBXCHECKLISTBOX ;TBXCHECKLISTBOX =OBJECT (TBXLISTBOX)PROCEDURE GETSELECTSET
  37. (VAR ASET :TBXBYTESET );FUNCTION GETTEXT (ITEM :INTEGER ;MAXLEN :INTEGER ):STRING ;VIRTUAL;PROCEDURE HANDLEEVENT
  38. (VAR EVENT :TEVENT );VIRTUAL;FUNCTION ISSELECTED (ITEM :INTEGER ):BOOLEAN ;VIRTUAL;PROCEDURE SELECTITEM (ITEM :INTEGER );
  39. VIRTUAL;PROCEDURE SETSELECTSET (ASET :TBXBYTESET );END ;PBXPAIREDLISTBOX =^TBXPAIREDLISTBOX ;
  40. TBXPAIREDLISTBOX =OBJECT (TBXLISTBOX)PROCEDURE SELECTITEM (ITEM :INTEGER );VIRTUAL;PROCEDURE HANDLEEVENT
  41. (VAR EVENT :TEVENT );VIRTUAL;END ;PBXPAIREDSTRLISTBOX =^TBXPAIREDSTRLISTBOX ;
  42. TBXPAIREDSTRLISTBOX =OBJECT (TBXPAIREDLISTBOX)FUNCTION GETTEXT (ITEM :INTEGER ;MAXLEN :INTEGER ):STRING ;VIRTUAL;END ;
  43. PBXVLISTBOX =^TBXVLISTBOX ;TBXVLISTBOX =OBJECT (TLISTBOX)ATMIN :BOOLEAN ;ATMAX :BOOLEAN ;CONSTRUCTOR INIT
  44. (BOUNDS :TRECT ;ANUMCOLS :WORD ;AHSCROLLBAR :PSCROLLBAR ;AVSCROLLBAR :PSCROLLBAR );CONSTRUCTOR LOAD (VAR S :TSTREAM );
  45. FUNCTION FILLBYPAGE (GOFORWARD :BOOLEAN ):INTEGER ;VIRTUAL;FUNCTION FILLFROM (FROMTOP :BOOLEAN ):INTEGER ;VIRTUAL;
  46. PROCEDURE FOCUSITEM (ITEM :INTEGER );VIRTUAL;FUNCTION GETITEM (ACOMMAND :WORD ):POBJECT ;VIRTUAL;PROCEDURE HANDLEEVENT
  47. (VAR EVENT :TEVENT );VIRTUAL;FUNCTION LOOKUP (P :POBJECT ):BOOLEAN ;VIRTUAL;FUNCTION MATCHITEM (P :POBJECT ):BOOLEAN ;
  48. VIRTUAL;PROCEDURE NEWLIST (ALIST :PCOLLECTION );VIRTUAL;FUNCTION PAGESIZE :INTEGER ;VIRTUAL;PROCEDURE SETCOMMANDSTATE
  49. (ENABLE :BOOLEAN );END ;{$IFDEF USE_NEW_FILE_DIALOG} PBXFILECOLLECTION =^TBXFILECOLLECTION ;
  50. TBXFILECOLLECTION =OBJECT (TFILECOLLECTION)FUNCTION COMPARE (KEY1 ,KEY2:POINTER ):INTEGER ;VIRTUAL;END ;
  51. PBXFILELIST =^TBXFILELIST ;TBXFILELIST =OBJECT (TFILELIST)CONSTRUCTOR INIT (VAR BOUNDS :TRECT ;AWILDCARD :PATHSTR ;
  52. ASCROLLBAR :PSCROLLBAR );PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;PROCEDURE FOCUSITEM (ITEM :INTEGER );
  53. VIRTUAL;PROCEDURE READDIRECTORY (AWILDCARD :PATHSTR );VIRTUAL;END ;PBXDRIVELIST =^TBXDRIVELIST ;
  54. TBXDRIVELIST =OBJECT (TBXFILELIST)CONSTRUCTOR INIT (VAR BOUNDS :TRECT ;ASCROLLBAR :PSCROLLBAR );PROCEDURE GETDRIVES
  55. (VAR DRIVES :DRIVESET );PROCEDURE READDIRECTORY (AWILDCARD :PATHSTR );VIRTUAL;FUNCTION GETKEY (VAR S :STRING ):POINTER ;
  56. VIRTUAL;END ;PBXFILEINPUTLINE =^TBXFILEINPUTLINE ;TBXFILEINPUTLINE =OBJECT (TFILEINPUTLINE)PROCEDURE HANDLEEVENT
  57. (VAR EVENT :TEVENT );VIRTUAL;END ;PBXFILEINFOPANE =^TBXFILEINFOPANE ;
  58. TBXFILEINFOPANE =OBJECT (TFILEINFOPANE)PROCEDURE DRAW ;VIRTUAL;END ;PBXDIRECTORYINFOPANE =^TBXDIRECTORYINFOPANE ;
  59. TBXDIRECTORYINFOPANE =OBJECT (TVIEW)CONSTRUCTOR INIT (VAR BOUNDS :TRECT );FUNCTION GETPALETTE :PPALETTE ;VIRTUAL;
  60. PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;PROCEDURE DRAW ;VIRTUAL;END ;PBXFILEDIALOG =^TBXFILEDIALOG ;
  61. TBXFILEDIALOG =OBJECT (TFILEDIALOG)DRIVELIST :PBXDRIVELIST ;CONSTRUCTOR INIT (AWILDCARD :TWILDSTR ;ATITLE :STRING ;
  62. INPUTNAME :STRING ;AOPTIONS :WORD ;HISTORYID :BYTE );END ;{$ENDIF} PROCEDURE REGISTERTVDIALOG ;
  63. CONST RBXRUNDIALOG :TSTREAMREC =(OBJTYPE :5050 ;VMTLINK :OFS (TYPEOF (TBXRUNDIALOG )^);LOAD :@ TBXRUNDIALOG . LOAD ;
  64. STORE :@ TBXRUNDIALOG . STORE );CONST RBXPERCENTDIALOG :TSTREAMREC =(OBJTYPE :5051 ;
  65. VMTLINK :OFS (TYPEOF (TBXPERCENTDIALOG )^);LOAD :@ TBXPERCENTDIALOG . LOAD ;STORE :@ TBXPERCENTDIALOG . STORE );
  66. CONST RBXPRINTDIALOG :TSTREAMREC =(OBJTYPE :5052 ;VMTLINK :OFS (TYPEOF (TBXPRINTDIALOG )^);LOAD :@ TBXPRINTDIALOG .
  67. LOAD ;STORE :@ TBXPRINTDIALOG . STORE );CONST RBXLINKEDLINE :TSTREAMREC =(OBJTYPE :5053 ;
  68. VMTLINK :OFS (TYPEOF (TBXLINKEDLINE )^);LOAD :@ TBXLINKEDLINE . LOAD ;STORE :@ TBXLINKEDLINE . STORE );
  69. CONST RBXLINKEDBOX :TSTREAMREC =(OBJTYPE :5054 ;VMTLINK :OFS (TYPEOF (TBXLINKEDBOX )^);LOAD :@ TBXLINKEDBOX . LOAD ;
  70. STORE :@ TBXLINKEDBOX . STORE );CONST RBXLISTBOX :TSTREAMREC =(OBJTYPE :5055 ;VMTLINK :OFS (TYPEOF (TBXLISTBOX )^);
  71. LOAD :@ TBXLISTBOX . LOAD ;STORE :@ TBXLISTBOX . STORE );CONST RBXCHECKLISTBOX :TSTREAMREC =(OBJTYPE :5056 ;
  72. VMTLINK :OFS (TYPEOF (TBXCHECKLISTBOX )^);LOAD :@ TBXCHECKLISTBOX . LOAD ;STORE :@ TBXCHECKLISTBOX . STORE );
  73. CONST RBXPAIREDLISTBOX :TSTREAMREC =(OBJTYPE :5057 ;VMTLINK :OFS (TYPEOF (TBXPAIREDLISTBOX )^);LOAD :@ TBXPAIREDLISTBOX .
  74. LOAD ;STORE :@ TBXPAIREDLISTBOX . STORE );CONST RBXPAIREDSTRLISTBOX :TSTREAMREC =(OBJTYPE :5058 ;
  75. VMTLINK :OFS (TYPEOF (TBXPAIREDSTRLISTBOX )^);LOAD :@ TBXPAIREDSTRLISTBOX . LOAD ;STORE :@ TBXPAIREDSTRLISTBOX . STORE );
  76. CONST RBXVLISTBOX :TSTREAMREC =(OBJTYPE :5059 ;VMTLINK :OFS (TYPEOF (TBXVLISTBOX )^);LOAD :@ TBXVLISTBOX . LOAD ;
  77. STORE :@ TBXVLISTBOX . STORE );{$IFDEF USE_NEW_FILE_DIALOG} CONST RBXFILECOLLECTION :TSTREAMREC =(OBJTYPE :5060 ;
  78. VMTLINK :OFS (TYPEOF (TBXFILECOLLECTION )^);LOAD :@ TBXFILECOLLECTION . LOAD ;STORE :@ TBXFILECOLLECTION . STORE );
  79. CONST RBXFILELIST :TSTREAMREC =(OBJTYPE :5061 ;VMTLINK :OFS (TYPEOF (TBXFILELIST )^);LOAD :@ TBXFILELIST . LOAD ;
  80. STORE :@ TBXFILELIST . STORE );CONST RBXDRIVELIST :TSTREAMREC =(OBJTYPE :5062 ;VMTLINK :OFS (TYPEOF (TBXDRIVELIST )^);
  81. LOAD :@ TBXDRIVELIST . LOAD ;STORE :@ TBXDRIVELIST . STORE );CONST RBXFILEINPUTLINE :TSTREAMREC =(OBJTYPE :5063 ;
  82. VMTLINK :OFS (TYPEOF (TBXFILEINPUTLINE )^);LOAD :@ TBXFILEINPUTLINE . LOAD ;STORE :@ TBXFILEINPUTLINE . STORE );
  83. CONST RBXFILEINFOPANE :TSTREAMREC =(OBJTYPE :5064 ;VMTLINK :OFS (TYPEOF (TBXFILEINFOPANE )^);LOAD :@ TBXFILEINFOPANE .
  84. LOAD ;STORE :@ TBXFILEINFOPANE . STORE );CONST RBXDIRECTORYINFOPANE :TSTREAMREC =(OBJTYPE :5065 ;
  85. VMTLINK :OFS (TYPEOF (TBXDIRECTORYINFOPANE )^);LOAD :@ TBXDIRECTORYINFOPANE . LOAD ;STORE :@ TBXDIRECTORYINFOPANE .
  86. STORE );CONST RBXFILEDIALOG :TSTREAMREC =(OBJTYPE :5066 ;VMTLINK :OFS (TYPEOF (TBXFILEDIALOG )^);LOAD :@ TBXFILEDIALOG .
  87. LOAD ;STORE :@ TBXFILEDIALOG . STORE );{$ENDIF} IMPLEMENTATION CONSTRUCTOR TBXRUNDIALOG.INIT (VAR BOUNDS:TRECT;
  88. ATITLE:TTITLESTR;AMESSAGE:STRING ;AOPTIONS:WORD;BUTTONROW:BYTE);VAR OO1I:TRECT;BEGIN INHERITED INIT(BOUNDS , ATITLE );
  89. PFFLAGS := AOPTIONS ;FLAGS := FLAGS AND NOT WFCLOSE ;BTNROW := BUTTONROW ;RUNSTATE := 0 ;IF ((PFFLAGS AND MFMESSAGELINE
  90. )<> 0 )THEN BEGIN OO1I.ASSIGN (2 , 1 , 42 , 2 );MSG := NEW (PSTATICTEXT , INIT (OO1I , AMESSAGE ));INSERT (MSG );END ;IF
  91. ((PFFLAGS AND MFOKCANCEL )=MFOKCANCEL )THEN BEGIN OO1I.ASSIGN (11 , BTNROW , 20 , BTNROW + 2 );SBUTTON := NEW (PBUTTON ,
  92. INIT (OO1I , 'Start', CMSTARTJOB , BFDEFAULT ));INSERT (SBUTTON );OO1I.ASSIGN (24 , BTNROW , 34 , BTNROW + 2 );CBUTTON :=
  93. NEW (PBUTTON , INIT (OO1I , 'Cancel', CMCANCELJOB , BFNORMAL ));INSERT (CBUTTON );END ELSE IF ((PFFLAGS AND MFOKBUTTON
  94. )<> 0 )THEN BEGIN OO1I.ASSIGN (17 , BTNROW , 26 , BTNROW + 2 );SBUTTON := NEW (PBUTTON , INIT (OO1I , 'Start', CMSTARTJOB
  95. , BFDEFAULT ));INSERT (SBUTTON );CBUTTON := NIL ;END ELSE IF ((PFFLAGS AND MFCANCELBUTTON )<> 0 )THEN BEGIN OO1I.ASSIGN
  96. (16 , BTNROW , 26 , BTNROW + 2 );CBUTTON := NEW (PBUTTON , INIT (OO1I , 'Cancel', CMCANCELJOB , BFDEFAULT ));INSERT
  97. (CBUTTON );SBUTTON := NIL ;END ;SELECTNEXT (FALSE );END ;CONSTRUCTOR TBXRUNDIALOG.LOAD (VAR S:TSTREAM);
  98. BEGIN INHERITED LOAD(S );GETSUBVIEWPTR (S , MSG );S.READ (RUNSTATE , SIZEOF (WORD ));S.READ (PFFLAGS , SIZEOF (WORD ));
  99. S.READ (BTNROW , SIZEOF (BYTE ));GETSUBVIEWPTR (S , SBUTTON );GETSUBVIEWPTR (S , CBUTTON );END ;
  100. PROCEDURE TBXRUNDIALOG.CHANGEMESSAGE (AMESSAGE:STRING );BEGIN IF (MSG <> NIL )THEN BEGIN DISPOSESTR (MSG ^. TEXT );MSG ^.
  101. TEXT := NEWSTR (AMESSAGE );MSG ^. DRAWVIEW ;END ;END ;FUNCTION TBXRUNDIALOG.EXECUTE :WORD ;VAR OIOO0l010lO:TEVENT;
  102. BEGIN IF ((PFFLAGS AND MFOKBUTTON )=0 )THEN RUNSTATE := CMSTARTJOB ;REPEAT GETEVENT (OIOO0l010lO );HANDLEEVENT
  103. (OIOO0l010lO );PROCESS ;UNTIL (RUNSTATE > CMCONTINUEJOB );EXECUTE := RUNSTATE ;END ;PROCEDURE TBXRUNDIALOG.HANDLEEVENT
  104. (VAR EVENT:TEVENT);VAR OO1I:TRECT;PROCEDURE OO10OO1l1I1 (OOllO00lIO0I:PBUTTON);BEGIN IF (OOllO00lIO0I <> NIL )THEN
  105. BEGIN DELETE (OOllO00lIO0I );DISPOSE (OOllO00lIO0I , DONE );END ;END ;BEGIN TWINDOW.HANDLEEVENT (EVENT );CASE EVENT.WHAT
  106.  OF EVKEYDOWN :CASE EVENT.KEYCODE  OF KBESC :BEGIN EVENT.WHAT := EVCOMMAND ;EVENT.COMMAND := CMCANCELJOB ;EVENT.INFOPTR
  107. := NIL ;PUTEVENT (EVENT );CLEAREVENT (EVENT );END ;KBENTER :BEGIN EVENT.WHAT := EVBROADCAST ;EVENT.COMMAND := CMDEFAULT ;
  108. EVENT.INFOPTR := NIL ;PUTEVENT (EVENT );CLEAREVENT (EVENT );END ;END ;EVCOMMAND :CASE EVENT.COMMAND  OF CMCANCELJOB ,
  109. CMJOBCOMPLETE , CMPAUSEJOB , CMCONTINUEJOB , CMSTARTJOB :BEGIN CASE EVENT.COMMAND  OF CMCONTINUEJOB , CMSTARTJOB
  110. :BEGIN LOCK ;OO10OO1l1I1 (SBUTTON );OO10OO1l1I1 (CBUTTON );IF ((PFFLAGS AND MFPAUSECANCEL )=MFPAUSECANCEL )THEN
  111. BEGIN OO1I.ASSIGN (11 , BTNROW , 20 , BTNROW + 2 );SBUTTON := NEW (PBUTTON , INIT (OO1I , 'Pause', CMPAUSEJOB , BFDEFAULT
  112. ));SBUTTON ^. STATE := SBUTTON ^. STATE OR SFACTIVE ;INSERT (SBUTTON );OO1I.ASSIGN (24 , BTNROW , 34 , BTNROW + 2 );
  113. CBUTTON := NEW (PBUTTON , INIT (OO1I , 'Cancel', CMCANCELJOB , BFNORMAL ));INSERT (CBUTTON );CBUTTON ^. STATE := CBUTTON
  114. ^. STATE OR SFACTIVE ;END ELSE IF ((PFFLAGS AND MFPAUSEBUTTON )<> 0 )THEN BEGIN OO1I.ASSIGN (17 , BTNROW , 26 , BTNROW +
  115. 2 );SBUTTON := NEW (PBUTTON , INIT (OO1I , 'Pause', CMPAUSEJOB , BFDEFAULT ));INSERT (SBUTTON );CBUTTON := NIL ;SBUTTON
  116. ^. STATE := SBUTTON ^. STATE OR SFACTIVE ;END ELSE IF ((PFFLAGS AND MFCANCELBUTTON )<> 0 )THEN BEGIN OO1I.ASSIGN (16 ,
  117. BTNROW , 26 , BTNROW + 2 );CBUTTON := NEW (PBUTTON , INIT (OO1I , 'Cancel', CMCANCELJOB , BFDEFAULT ));INSERT (CBUTTON );
  118. SBUTTON := NIL ;CBUTTON ^. STATE := CBUTTON ^. STATE OR SFACTIVE ;END ;SELECTNEXT (FALSE );DRAWVIEW ;UNLOCK ;END ;
  119. CMPAUSEJOB :BEGIN LOCK ;OO10OO1l1I1 (SBUTTON );OO10OO1l1I1 (CBUTTON );IF ((PFFLAGS AND MFPAUSECANCEL )=MFPAUSECANCEL
  120. )THEN BEGIN OO1I.ASSIGN (10 , BTNROW , 22 , BTNROW + 2 );SBUTTON := NEW (PBUTTON , INIT (OO1I , 'Continue', CMCONTINUEJOB
  121. , BFDEFAULT ));INSERT (SBUTTON );OO1I.ASSIGN (25 , BTNROW , 35 , BTNROW + 2 );CBUTTON := NEW (PBUTTON , INIT (OO1I ,
  122. 'Cancel', CMCANCELJOB , BFNORMAL ));INSERT (CBUTTON );SBUTTON ^. STATE := SBUTTON ^. STATE OR SFACTIVE ;CBUTTON ^. STATE
  123. := CBUTTON ^. STATE OR SFACTIVE ;END ELSE BEGIN OO1I.ASSIGN (15 , BTNROW , 27 , BTNROW + 2 );SBUTTON := NEW (PBUTTON ,
  124. INIT (OO1I , 'Continue', CMCONTINUEJOB , BFDEFAULT ));INSERT (SBUTTON );CBUTTON := NIL ;SBUTTON ^. STATE := SBUTTON ^.
  125. STATE OR SFACTIVE ;END ;SELECTNEXT (FALSE );DRAWVIEW ;UNLOCK ;END ;END ;RUNSTATE := EVENT.COMMAND ;CLEAREVENT (EVENT );
  126. END ;END ;END ;END ;PROCEDURE TBXRUNDIALOG.PROCESS ;BEGIN END ;PROCEDURE TBXRUNDIALOG.STORE (VAR S:TSTREAM);
  127. BEGIN INHERITED STORE(S );PUTSUBVIEWPTR (S , MSG );S.WRITE (RUNSTATE , SIZEOF (WORD ));S.WRITE (PFFLAGS , SIZEOF (WORD
  128. ));S.WRITE (BTNROW , SIZEOF (BYTE ));PUTSUBVIEWPTR (S , SBUTTON );PUTSUBVIEWPTR (S , CBUTTON );END ;
  129. CONSTRUCTOR TBXPERCENTDIALOG.INIT (ATITLE:TTITLESTR;AMESSAGE:STRING ;ATOTAL:LONGINT;AOPTIONS:WORD);VAR OO1I:TRECT;
  130. BEGIN OO1I.ASSIGN (0 , 0 , 44 , 10 );INHERITED INIT(OO1I , ATITLE , AMESSAGE , AOPTIONS , 7 );OPTIONS := OPTIONS OR
  131. OFCENTERED ;TOTAL := ATOTAL ;STEP := TOTAL DIV 25 ;IF (TOTAL MOD 25 <> 0 )THEN INC (STEP );OO1I.ASSIGN (9 , 3 , 36 , 4 );
  132. INSERT (NEW (PSTATICTEXT , INIT (OO1I , '┌─────────────────────────┐')));OO1I.ASSIGN (9 , 4 , 36 , 5 );INSERT (NEW
  133. (PSTATICTEXT , INIT (OO1I , '│                         │')));OO1I.ASSIGN (9 , 5 , 36 , 6 );INSERT (NEW (PSTATICTEXT ,
  134. INIT (OO1I , '└─────────────────────────┘')));OO1I.ASSIGN (20 , 2 , 25 , 3 );PCT := NEW (PSTATICTEXT , INIT (OO1I ,
  135. '0%  '));INSERT (PCT );OO1I.ASSIGN (10 , 4 , 35 , 5 );BAR := NEW (PSTATICTEXT , INIT (OO1I , CHARS (25 , BARCHAR )));
  136. INSERT (BAR );END ;CONSTRUCTOR TBXPERCENTDIALOG.LOAD (VAR S:TSTREAM);VAR OO1I:TRECT;BEGIN INHERITED LOAD(S );S.READ
  137. (TOTAL , SIZEOF (LONGINT ));S.READ (COUNT , SIZEOF (LONGINT ));S.READ (STEP , SIZEOF (WORD ));GETSUBVIEWPTR (S , PCT );
  138. GETSUBVIEWPTR (S , BAR );OO1I.ASSIGN (9 , 3 , 36 , 4 );INSERT (NEW (PSTATICTEXT , INIT (OO1I ,
  139. '┌─────────────────────────┐')));OO1I.ASSIGN (9 , 4 , 36 , 5 );INSERT (NEW (PSTATICTEXT , INIT (OO1I ,
  140. '│                         │')));OO1I.ASSIGN (9 , 5 , 36 , 6 );INSERT (NEW (PSTATICTEXT , INIT (OO1I ,
  141. '└─────────────────────────┘')));END ;PROCEDURE TBXPERCENTDIALOG.STORE (VAR S:TSTREAM);BEGIN INHERITED STORE(S );S.WRITE
  142. (TOTAL , SIZEOF (LONGINT ));S.WRITE (COUNT , SIZEOF (LONGINT ));S.WRITE (STEP , SIZEOF (WORD ));PUTSUBVIEWPTR (S , PCT );
  143. PUTSUBVIEWPTR (S , BAR );END ;PROCEDURE TBXPERCENTDIALOG.INCREMENT ;BEGIN INCREMENTBY (1 );END ;
  144. PROCEDURE TBXPERCENTDIALOG.INCREMENTBY (ASTEP:WORD);VAR O100lll0I1l:REAL;OOIO:WORD;OO0O:STRING [ 3 ] ;BEGIN IF (COUNT <
  145. TOTAL )THEN BEGIN COUNT := COUNT + ASTEP ;IF (COUNT >= TOTAL )THEN BEGIN FILLCHAR (BAR ^. TEXT ^[ 1 ] , 25 , BARFILLCHAR
  146. );BAR ^. DRAWVIEW ;PCT ^. TEXT ^:= '100%';PCT ^. DRAWVIEW ;END ELSE IF ((COUNT MOD STEP )=0 )THEN BEGIN O100lll0I1l :=
  147. (COUNT / TOTAL )* 100 ;OOIO := ROUND (O100lll0I1l / 4 );FILLCHAR (BAR ^. TEXT ^[ 1 ] , OOIO , BARFILLCHAR );BAR ^.
  148. DRAWVIEW ;STR (O100lll0I1l :3 :0 , OO0O );PCT ^. TEXT ^:= OO0O + '%';PCT ^. DRAWVIEW ;END ;END ;END ;
  149. CONSTRUCTOR TBXPRINTDIALOG.INIT (ATITLE:TTITLESTR;AMESSAGE:STRING ;AOPTIONS:WORD);VAR OO1I:TRECT;BEGIN OO1I.ASSIGN (0 , 0
  150. , 44 , 7 );INHERITED INIT(OO1I , ATITLE , AMESSAGE , AOPTIONS , 4 );OPTIONS := OPTIONS OR OFCENTERED ;END ;
  151. CONSTRUCTOR TBXLINKEDBOX.INIT (VAR BOUNDS:TRECT;ANUMCOLS:WORD;ASCROLLBAR:PSCROLLBAR;EVENTCODE:WORD);
  152. BEGIN INHERITED INIT(BOUNDS , ANUMCOLS , ASCROLLBAR );LINKEVENT := EVENTCODE ;END ;CONSTRUCTOR TBXLINKEDBOX.LOAD
  153. (VAR S:TSTREAM);BEGIN INHERITED LOAD(S );S.READ (LINKEVENT , SIZEOF (WORD ));END ;PROCEDURE TBXLINKEDBOX.FOCUSITEM
  154. (ITEM:INTEGER);BEGIN INHERITED FOCUSITEM(ITEM );MESSAGE (OWNER , EVBROADCAST , LINKEVENT , LIST ^. AT (ITEM ));END ;
  155. PROCEDURE TBXLINKEDBOX.STORE (VAR S:TSTREAM);BEGIN INHERITED STORE(S );S.WRITE (LINKEVENT , SIZEOF (WORD ));END ;
  156. CONSTRUCTOR TBXLINKEDLINE.INIT (VAR BOUNDS:TRECT;AMAXLEN:INTEGER;EVENTCODE:WORD);BEGIN INHERITED INIT(BOUNDS , AMAXLEN );
  157. LINKEVENT := EVENTCODE ;EVENTMASK := EVENTMASK OR EVBROADCAST ;END ;CONSTRUCTOR TBXLINKEDLINE.LOAD (VAR S:TSTREAM);
  158. BEGIN INHERITED LOAD(S );S.READ (LINKEVENT , SIZEOF (WORD ));END ;PROCEDURE TBXLINKEDLINE.HANDLEEVENT (VAR EVENT:TEVENT);
  159. VAR OO1O:STRING ;BEGIN INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT =EVBROADCAST )THEN IF (EVENT.COMMAND =LINKEVENT )THEN
  160. IF (STATE AND SFSELECTED =0 )THEN BEGIN SETDATA (PSTRING (EVENT.INFOPTR )^);DRAWVIEW ;CLEAREVENT (EVENT );END ;END ;
  161. PROCEDURE TBXLINKEDLINE.STORE (VAR S:TSTREAM);BEGIN INHERITED STORE(S );S.WRITE (LINKEVENT , SIZEOF (WORD ));END ;
  162. CONSTRUCTOR TBXMESSAGEDIALOG.INIT (AOPTIONS:WORD);VAR OO1I:TRECT;BEGIN OO1I.ASSIGN (0 , 0 , 4 , 4 );INHERITED INIT(OO1I ,
  163. TITLES [ AOPTIONS AND $3 ] );DOPTIONS := AOPTIONS ;SLIST.INIT (15 , 5 );END ;PROCEDURE TBXMESSAGEDIALOG.ADDMESSAGE
  164. (ST:STRING );VAR OO10:PSTRING;BEGIN GETMEM (OO10 , LENGTH (ST )+ 1 );IF (OO10 <> NIL )THEN BEGIN OO10 ^:= ST ;
  165. SLIST.INSERT (OO10 );END ;END ;FUNCTION TBXMESSAGEDIALOG.EXECUTE :WORD ;VAR OO10:POINTER;Ol0101I,Ol0101O:BYTE;
  166. OOIO,OOIl:BYTE;OIlO:BYTE;OIOO101OlII:BYTE;OIIll0II0OO:INTEGER;OI11I1O1l00:INTEGER;OO1I:TRECT;BEGIN HIDE ;DESKTOP ^.
  167. GETEXTENT (OO1I );OOIO := 0 ;FOR OIlO := 0 TO SLIST.COUNT - 1  DO BEGIN OO10 := SLIST.AT (OIlO );IF (BYTE (OO10 ^)>
  168. OO1I.B.X )THEN BYTE (OO10 ^):= OO1I.B.X ;IF (BYTE (OO10 ^)> OOIO )THEN OOIO := BYTE (OO10 ^);END ;OIOO101OlII := 0 ;
  169. FOR OIlO := 0 TO 3  DO IF (DOPTIONS AND ($0100 SHL OIlO )<> 0 )THEN INC (OIOO101OlII );IF ((OIOO101OlII * 11 + 1 )> OOIO
  170. )THEN OOIO := OIOO101OlII * 11 + 1 ;OOIO := OOIO + 2 ;OOIl := SLIST.COUNT + 2 ;IF (BUTTONCOUNT > 0 )THEN OOIl := OOIl + 3
  171. ;IF (OOIl > OO1I.B.Y )THEN OOIl := OO1I.B.Y ;Ol0101I := (OO1I.B.X - OOIO )DIV 2 ;Ol0101O := (OO1I.B.Y - OOIl )DIV 2 ;
  172. OO1I.ASSIGN (Ol0101I , Ol0101O , Ol0101I + OOIO , Ol0101O + OOIl );CHANGEBOUNDS (OO1I );IF (OIOO101OlII > 0 )THEN
  173. BEGIN OIIll0II0OO := SIZE.X - (OIOO101OlII * 9 );OI11I1O1l00 := OIIll0II0OO DIV (OIOO101OlII + 1 );OOIO := OI11I1O1l00 +
  174. (OIIll0II0OO MOD OIOO101OlII )SHR 1 ;FOR OIlO := 0 TO 3  DO IF (DOPTIONS AND ($0100 SHL OIlO )<> 0 )THEN
  175. BEGIN OO1I.ASSIGN (OOIO , SIZE.Y - 3 , OOIO + 10 , SIZE.Y - 1 );INSERT (NEW (PBUTTON , INIT (OO1I , BUTTONS [ OIlO ] ,
  176. COMMANDS [ OIlO ] , BFNORMAL )));INC (OOIO , OI11I1O1l00 + 8 );END ;SELECTNEXT (FALSE );END ;OOIO := SLIST.COUNT ;IF
  177. (OOIO > OOIl - 4 )THEN OOIO := OOIl - 4 ;FOR OIlO := 0 TO OOIO - 1  DO BEGIN OO1I.ASSIGN (1 , OIlO + 1 , SIZE.X - 1 ,
  178. OIlO + 2 );INSERT (NEW (PSTATICTEXT , INIT (OO1I , PSTRING (SLIST.AT (OIlO ))^)));END ;SLIST.DONE ;SHOW ;EXECUTE :=
  179. INHERITED EXECUTE;END ;FUNCTION TBXLISTBOX.GETTEXT (ITEM:INTEGER;MAXLEN:INTEGER):STRING ;BEGIN GETTEXT := PBXOBJECT (LIST
  180. ^. AT (ITEM ))^. GETTEXT (MAXLEN );END ;PROCEDURE TBXCHECKLISTBOX.GETSELECTSET (VAR ASET:TBXBYTESET);VAR OIlO:BYTE;
  181. OOIO:INTEGER;BEGIN OOIO := LIST ^. COUNT - 1 ;IF (OOIO > 255 )THEN OOIO := 255 ;ASET := [ ] ;FOR OIlO := 0 TO OOIO  DO IF
  182. PBXSELECTOBJECT (LIST ^. AT (OIlO ))^. GETSELECT THEN ASET := ASET + [ OIlO ] ;END ;FUNCTION TBXCHECKLISTBOX.GETTEXT
  183. (ITEM:INTEGER;MAXLEN:INTEGER):STRING ;BEGIN IF PBXSELECTOBJECT (LIST ^. AT (ITEM ))^. GETSELECT THEN GETTEXT := '[X] '+
  184. PBXSELECTSTR (LIST ^. AT (ITEM ))^. GETTEXT (MAXLEN - 3 )ELSE GETTEXT := '[ ] '+ PBXSELECTSTR (LIST ^. AT (ITEM ))^.
  185. GETTEXT (MAXLEN - 3 );END ;PROCEDURE TBXCHECKLISTBOX.HANDLEEVENT (VAR EVENT:TEVENT);VAR OI1I1O1lll10:TPOINT;
  186. OIlIl0l11OO:WORD;OI1000l1II00:INTEGER;BEGIN IF (EVENT.WHAT =EVMOUSEDOWN )THEN BEGIN MAKELOCAL (EVENT.WHERE , OI1I1O1lll10
  187. );IF MOUSEINVIEW (EVENT.WHERE )THEN BEGIN OIlIl0l11OO := SIZE.X DIV NUMCOLS + 1 ;OI1000l1II00 := OI1I1O1lll10.Y + (SIZE.Y
  188. * (OI1I1O1lll10.X DIV OIlIl0l11OO ))+ TOPITEM ;SELECTITEM (OI1000l1II00 );END ;END ;INHERITED HANDLEEVENT(EVENT );END ;
  189. FUNCTION TBXCHECKLISTBOX.ISSELECTED (ITEM:INTEGER):BOOLEAN ;BEGIN ISSELECTED := PBXSELECTOBJECT (LIST ^. AT (ITEM ))^.
  190. GETSELECT ;END ;PROCEDURE TBXCHECKLISTBOX.SELECTITEM (ITEM:INTEGER);BEGIN PBXSELECTOBJECT (LIST ^. AT (ITEM ))^.
  191. SETSELECT (NOT PBXSELECTOBJECT (LIST ^. AT (ITEM ))^. GETSELECT );DRAWVIEW ;END ;PROCEDURE TBXCHECKLISTBOX.SETSELECTSET
  192. (ASET:TBXBYTESET);VAR OIlO:BYTE;OOIO:INTEGER;BEGIN OOIO := LIST ^. COUNT - 1 ;IF (OOIO > 255 )THEN OOIO := 255 ;FOR OIlO
  193. := 0 TO OOIO  DO PBXSELECTOBJECT (LIST ^. AT (OIlO ))^. SETSELECT (OIlO IN ASET );END ;
  194. PROCEDURE TBXPAIREDLISTBOX.SELECTITEM (ITEM:INTEGER);VAR OO10:PBXITEMREC;BEGIN INHERITED SELECTITEM(ITEM );NEW (OO10 );
  195. OO10 ^. ITEM := LIST ^. AT (ITEM );OO10 ^. OWNER := @ SELF ;LIST ^. ATDELETE (ITEM );SETRANGE (LIST ^. COUNT );MESSAGE
  196. (OWNER , EVBROADCAST , CMTAKEITEM , OO10 );DRAWVIEW ;END ;PROCEDURE TBXPAIREDLISTBOX.HANDLEEVENT (VAR EVENT:TEVENT);
  197. VAR OI1I1O1lll10:TPOINT;OIlIl0l11OO:WORD;OII0OO0lllO:INTEGER;BEGIN CASE EVENT.WHAT  OF EVBROADCAST :CASE EVENT.COMMAND
  198.  OF CMTAKEITEM :IF (PBXITEMREC (EVENT.INFOPTR )^. OWNER <> @ SELF )THEN BEGIN LIST ^. INSERT (PBXITEMREC (EVENT.INFOPTR
  199. )^. ITEM );SETRANGE (LIST ^. COUNT );DISPOSE (PBXITEMREC (EVENT.INFOPTR ));CLEAREVENT (EVENT );DRAWVIEW ;END ;END ;
  200. EVMOUSEDOWN :BEGIN MAKELOCAL (EVENT.WHERE , OI1I1O1lll10 );IF MOUSEINVIEW (EVENT.WHERE )THEN BEGIN OIlIl0l11OO := SIZE.X
  201. DIV NUMCOLS + 1 ;OII0OO0lllO := OI1I1O1lll10.Y + (SIZE.Y * (OI1I1O1lll10.X DIV OIlIl0l11OO ))+ TOPITEM ;IF (OII0OO0lllO <
  202. LIST ^. COUNT )THEN BEGIN IF EVENT.DOUBLE THEN BEGIN SELECTITEM (OII0OO0lllO );CLEAREVENT (EVENT );END END ELSE
  203. BEGIN CLEAREVENT (EVENT );END ;END ;END ;END ;INHERITED HANDLEEVENT(EVENT );END ;FUNCTION TBXPAIREDSTRLISTBOX.GETTEXT
  204. (ITEM:INTEGER;MAXLEN:INTEGER):STRING ;BEGIN IF (LIST <> NIL )THEN GETTEXT := FTRUNCATESTR (PSTRING (LIST ^. AT (ITEM ))^,
  205. MAXLEN )ELSE GETTEXT := '';END ;CONSTRUCTOR TBXVLISTBOX.INIT (BOUNDS:TRECT;ANUMCOLS:WORD;AHSCROLLBAR:PSCROLLBAR;
  206. AVSCROLLBAR:PSCROLLBAR);BEGIN TLISTVIEWER.INIT (BOUNDS , ANUMCOLS , AHSCROLLBAR , AVSCROLLBAR );LIST := NIL ;SETRANGE (0
  207. );ATMIN := FALSE ;ATMAX := FALSE ;SETCOMMANDSTATE (FALSE );END ;CONSTRUCTOR TBXVLISTBOX.LOAD (VAR S:TSTREAM);
  208. BEGIN INHERITED LOAD(S );ATMIN := FALSE ;ATMAX := FALSE ;END ;FUNCTION TBXVLISTBOX.FILLBYPAGE (GOFORWARD:BOOLEAN):INTEGER
  209. ;VAR O10OOll1OlI01:INTEGER;OOIO,O1l1llO110:INTEGER;OI1000l1II00:POBJECT;O1OlOIlO010O:WORD;BEGIN FILLBYPAGE := 0 ;IF (LIST
  210. ^. COUNT > 0 )THEN BEGIN IF GOFORWARD THEN BEGIN OI1000l1II00 := GETITEM (VLLISTMAX );O1OlOIlO010O := VLNEXT ;O1l1llO110
  211. := 0 ;END ELSE BEGIN OI1000l1II00 := GETITEM (VLLISTMIN );O1OlOIlO010O := VLPREV ;O1l1llO110 := LIST ^. COUNT - 1 ;END ;
  212. DISPOSE (OI1000l1II00 , DONE );OI1000l1II00 := GETITEM (O1OlOIlO010O );O10OOll1OlI01 := PAGESIZE ;OOIO := 0 ;
  213. WHILE (OI1000l1II00 <> NIL )AND (OOIO < O10OOll1OlI01 ) DO BEGIN IF (LIST ^. COUNT =LIST ^. LIMIT )THEN LIST ^. FREE
  214. (LIST ^. AT (O1l1llO110 ));IF GOFORWARD THEN LIST ^. INSERT (OI1000l1II00 )ELSE LIST ^. ATINSERT (0 , OI1000l1II00 );INC
  215. (OOIO );IF (OOIO < O10OOll1OlI01 )THEN OI1000l1II00 := GETITEM (O1OlOIlO010O );END ;IF GOFORWARD THEN BEGIN ATMAX :=
  216. (OOIO < O10OOll1OlI01 );IF ATMIN THEN ATMIN := (OOIO =0 );END ELSE BEGIN ATMIN := (OOIO < O10OOll1OlI01 );IF ATMAX THEN
  217. ATMAX := (OOIO =0 );END ;FILLBYPAGE := OOIO ;SETCOMMANDSTATE (TRUE );DRAW ;END ;END ;FUNCTION TBXVLISTBOX.FILLFROM
  218. (FROMTOP:BOOLEAN):INTEGER ;VAR OOIO:INTEGER;O1OlOIlO010O:WORD;OI1000l1II00:POBJECT;OOIOOI01l0:INTEGER;BEGIN IF FROMTOP
  219. THEN BEGIN OI1000l1II00 := GETITEM (VLMIN );O1OlOIlO010O := VLNEXT END ELSE BEGIN OI1000l1II00 := GETITEM (VLMAX );
  220. O1OlOIlO010O := VLPREV ;END ;OOIO := 0 ;OOIOOI01l0 := LIST ^. LIMIT ;LIST ^. FREEALL ;WHILE (OI1000l1II00 <> NIL )AND
  221. (OOIO < OOIOOI01l0 ) DO BEGIN IF FROMTOP THEN LIST ^. INSERT (OI1000l1II00 )ELSE LIST ^. ATINSERT (0 , OI1000l1II00 );
  222. INC (OOIO );IF (OOIO < OOIOOI01l0 )THEN OI1000l1II00 := GETITEM (O1OlOIlO010O );END ;IF FROMTOP THEN BEGIN ATMIN := TRUE
  223. ;ATMAX := (OOIO < OOIOOI01l0 );END ELSE BEGIN ATMAX := TRUE ;ATMIN := (OOIO < OOIOOI01l0 );END ;SETRANGE (LIST ^. COUNT
  224. );SETCOMMANDSTATE (TRUE );DRAW ;FILLFROM := OOIO ;END ;PROCEDURE TBXVLISTBOX.FOCUSITEM (ITEM:INTEGER);
  225. BEGIN INHERITED FOCUSITEM(ITEM );DRAW ;END ;FUNCTION TBXVLISTBOX.GETITEM (ACOMMAND:WORD):POBJECT ;BEGIN RUNERROR (211 );
  226. END ;PROCEDURE TBXVLISTBOX.HANDLEEVENT (VAR EVENT:TEVENT);VAR OIlllI0OIOO:WORD;BEGIN CASE EVENT.WHAT  OF EVBROADCAST
  227. :BEGIN CASE EVENT.COMMAND  OF CMPREVPAGE :IF NOT ATMIN THEN FILLBYPAGE (FALSE );CMNEXTPAGE :IF NOT ATMAX THEN FILLBYPAGE
  228. (TRUE );CMFIRSTPAGE :IF NOT ATMIN THEN FILLFROM (TRUE );CMLASTPAGE :IF NOT ATMAX THEN FILLFROM (FALSE );END ;END ;END ;
  229. INHERITED HANDLEEVENT(EVENT );END ;FUNCTION TBXVLISTBOX.LOOKUP (P:POBJECT):BOOLEAN ;VAR OOIOOI01l0:INTEGER;BEGIN LOOKUP
  230. := FALSE ;IF (P <> NIL )THEN IF MATCHITEM (P )THEN BEGIN OOIOOI01l0 := LIST ^. LIMIT ;LIST ^. FREEALL ;WHILE (P <> NIL
  231. )AND (LIST ^. COUNT < LIST ^. LIMIT ) DO BEGIN LIST ^. INSERT (P );IF (LIST ^. COUNT < LIST ^. LIMIT )THEN P := GETITEM
  232. (VLNEXT );END ;ATMAX := (P =NIL );ATMIN := FALSE ;LOOKUP := TRUE ;SETRANGE (LIST ^. COUNT );SETCOMMANDSTATE (TRUE );
  233. FOCUSITEM (0 );END ;END ;FUNCTION TBXVLISTBOX.MATCHITEM (P:POBJECT):BOOLEAN ;BEGIN MATCHITEM := FALSE ;END ;
  234. PROCEDURE TBXVLISTBOX.NEWLIST (ALIST:PCOLLECTION);BEGIN INHERITED NEWLIST(ALIST );SETCOMMANDSTATE (TRUE );END ;
  235. FUNCTION TBXVLISTBOX.PAGESIZE :INTEGER ;BEGIN PAGESIZE := LIST ^. LIMIT DIV 3 ;END ;
  236. PROCEDURE TBXVLISTBOX.SETCOMMANDSTATE (ENABLE:BOOLEAN);BEGIN IF ATMAX OR NOT ENABLE THEN DISABLECOMMANDS ([ CMNEXTPAGE ,
  237. CMLASTPAGE ] )ELSE IF NOT ATMAX THEN ENABLECOMMANDS ([ CMNEXTPAGE , CMLASTPAGE ] );IF ATMIN OR NOT ENABLE THEN
  238. DISABLECOMMANDS ([ CMPREVPAGE , CMFIRSTPAGE ] )ELSE IF NOT ATMIN THEN ENABLECOMMANDS ([ CMPREVPAGE , CMFIRSTPAGE ] );
  239. END ;{$IFDEF USE_NEW_FILE_DIALOG} FUNCTION TBXFILECOLLECTION.COMPARE (KEY1,KEY2:POINTER):INTEGER ;BEGIN IF PSEARCHREC
  240. (KEY1 )^. NAME =PSEARCHREC (KEY2 )^. NAME THEN COMPARE := 0 ELSE IF PSEARCHREC (KEY1 )^. NAME ='..'THEN COMPARE := - 1
  241. ELSE IF PSEARCHREC (KEY2 )^. NAME ='..'THEN COMPARE := 1 ELSE IF (PSEARCHREC (KEY1 )^. ATTR AND VOLUMEID <> 0 )AND
  242. (PSEARCHREC (KEY2 )^. ATTR AND VOLUMEID =0 )THEN COMPARE := 1 ELSE IF (PSEARCHREC (KEY2 )^. ATTR AND VOLUMEID <> 0 )AND
  243. (PSEARCHREC (KEY1 )^. ATTR AND VOLUMEID =0 )THEN COMPARE := - 1 ELSE IF PSEARCHREC (KEY1 )^. NAME > PSEARCHREC (KEY2 )^.
  244. NAME THEN COMPARE := 1 ELSE COMPARE := - 1 ;END ;CONSTRUCTOR TBXFILELIST.INIT (VAR BOUNDS:TRECT;AWILDCARD:PATHSTR;
  245. ASCROLLBAR:PSCROLLBAR);BEGIN TSORTEDLISTBOX.INIT (BOUNDS , 1 , ASCROLLBAR );END ;PROCEDURE TBXFILELIST.HANDLEEVENT
  246. (VAR EVENT:TEVENT);VAR OIOl:TEVENT;BEGIN IF (EVENT.WHAT =EVBROADCAST )AND (EVENT.COMMAND =CMRECEIVEDFOCUS )AND
  247. (EVENT.INFOPTR =@ SELF )THEN BEGIN FOCUSITEM (FOCUSED )END ELSE BEGIN IF (EVENT.WHAT =EVMOUSEDOWN )AND (EVENT.DOUBLE
  248. )THEN MESSAGE (OWNER , EVBROADCAST , CMRECORDHISTORY , NIL );INHERITED HANDLEEVENT(EVENT );END ;END ;
  249. PROCEDURE TBXFILELIST.FOCUSITEM (ITEM:INTEGER);BEGIN IF (LIST ^. COUNT > 0 )THEN INHERITED FOCUSITEM(ITEM );END ;
  250. PROCEDURE TBXFILELIST.READDIRECTORY (AWILDCARD:PATHSTR);VAR OO1O:SEARCHREC;OO10:PSEARCHREC;OIOO0l010lO:TEVENT;
  251. O1lO110OOlI0:PBXFILECOLLECTION;OIOl00O1O1O:DIRSTR;OI111IlIOOl0:NAMESTR;OIl0OOl0ll1:EXTSTR;BEGIN PBXFILEDIALOG (OWNER )^.
  252. DRIVELIST ^. READDIRECTORY (AWILDCARD );AWILDCARD := FEXPAND (AWILDCARD );FSPLIT (AWILDCARD , OIOl00O1O1O , OI111IlIOOl0
  253. , OIl0OOl0ll1 );O1lO110OOlI0 := NEW (PBXFILECOLLECTION , INIT (5 , 5 ));FINDFIRST (AWILDCARD , READONLY + ARCHIVE , OO1O
  254. );OO10 := @ OO10 ;WHILE (OO10 <> NIL )AND (DOSERROR =0 ) DO BEGIN IF (OO1O.ATTR AND DIRECTORY =0 )THEN BEGIN OO10 :=
  255. MEMALLOC (SIZEOF (OO10 ^));IF (OO10 <> NIL )THEN BEGIN MOVE (OO1O.ATTR , OO10 ^, SIZEOF (OO10 ^));O1lO110OOlI0 ^. INSERT
  256. (OO10 );END ;END ;FINDNEXT (OO1O );END ;IF (OO10 =NIL )THEN MESSAGEBOX ('Too many files.', NIL , MFOKBUTTON + MFWARNING
  257. );NEWLIST (O1lO110OOlI0 );IF (LIST ^. COUNT > 0 )THEN BEGIN OIOO0l010lO.WHAT := EVBROADCAST ;OIOO0l010lO.COMMAND :=
  258. CMFILEFOCUSED ;OIOO0l010lO.INFOPTR := LIST ^. AT (0 );OWNER ^. HANDLEEVENT (OIOO0l010lO );END ;END ;
  259. CONSTRUCTOR TBXDRIVELIST.INIT (VAR BOUNDS:TRECT;ASCROLLBAR:PSCROLLBAR);BEGIN TSORTEDLISTBOX.INIT (BOUNDS , 1 , ASCROLLBAR
  260. );END ;PROCEDURE TBXDRIVELIST.GETDRIVES (VAR DRIVES:DRIVESET);VAR OOII1I0OIOll:LONGINT;BEGIN ASM {} MOV AH , 19h {}
  261. INT 21h {} PUSH AX {} {} MOV BX , 1 {} XOR CX , CX {} XOR DL , DL {} MOV WORD PTR [ OOII1I0OIOll] , 0 {}
  262. MOV WORD PTR [ OOII1I0OIOll+ 2 ] , 0 {} {} @1 : MOV AH , 0Eh {} INT 21h {} MOV AH , 19h {} INT 21h {} CMP AL , DL {}
  263. JNE @2 {} OR WORD PTR [ OOII1I0OIOll] , BX {} OR WORD PTR [ OOII1I0OIOll+ 2 ] , CX {} {} @2 : SHL BX , 1 {} RCL CX , 1 {}
  264. INC DL {} CMP DL , 26 {} JB @1 {} {} MOV AH , 0Eh {} POP DX {} INT 21h {} {} SHL WORD PTR [ OOII1I0OIOll] , 1 {}
  265. RCL WORD PTR [ OOII1I0OIOll+ 2 ] , 1 {} {} END;DRIVES := DRIVESET (OOII1I0OIOll );END ;FUNCTION TBXDRIVELIST.GETKEY
  266. (VAR S:STRING ):POINTER ;CONST O11OOO00:TSEARCHREC=();PROCEDURE Ol00IO0I11ll (VAR OO1O:STRING );VAR OIlO:BYTE;
  267. BEGIN FOR OIlO := 1 TO LENGTH (OO1O ) DO OO1O [ OIlO ] := UPCASE (OO1O [ OIlO ] );END ;BEGIN O11OOO00.ATTR := DIRECTORY ;
  268. O11OOO00.NAME := S ;Ol00IO0I11ll (O11OOO00.NAME );GETKEY := @ O11OOO00 ;END ;PROCEDURE TBXDRIVELIST.READDIRECTORY
  269. (AWILDCARD:PATHSTR);VAR OIOI:CHAR;O10O0lIO0O01l:DRIVESET;OO1O:SEARCHREC;OO10:PSEARCHREC;O1lO110OOlI0:PBXFILECOLLECTION;
  270. OOlOO1OIOllO:DIRSTR;OI111IlIO11I:NAMESTR;OO01IOOlI0l:EXTSTR;BEGIN OO10 := @ OO10 ;O1lO110OOlI0 := NEW (PBXFILECOLLECTION
  271. , INIT (5 , 5 ));AWILDCARD := FEXPAND (AWILDCARD );FSPLIT (AWILDCARD , OOlOO1OIOllO , OI111IlIO11I , OO01IOOlI0l );
  272. AWILDCARD := OOlOO1OIOllO + '*.*';FINDFIRST (AWILDCARD , DIRECTORY , OO1O );WHILE (OO10 <> NIL )AND (DOSERROR =0
  273. ) DO BEGIN IF (OO1O.ATTR AND DIRECTORY <> 0 )AND (OO1O.NAME [ 1 ] <> '.')THEN BEGIN OO10 := MEMALLOC (SIZEOF (OO10 ^));
  274. IF (OO10 <> NIL )THEN BEGIN MOVE (OO1O.ATTR , OO10 ^, SIZEOF (OO10 ^));O1lO110OOlI0 ^. INSERT (POBJECT (OO10 ));END ;
  275. END ;FINDNEXT (OO1O );END ;IF LENGTH (OOlOO1OIOllO )> 4 THEN BEGIN OO10 := MEMALLOC (SIZEOF (OO10 ^));IF (OO10 <> NIL
  276. )THEN BEGIN FINDFIRST (AWILDCARD , DIRECTORY , OO1O );FINDNEXT (OO1O );IF (DOSERROR =0 )AND (OO1O.NAME ='..')THEN
  277. BEGIN MOVE (OO1O.ATTR , OO10 ^, SIZEOF (OO10 ^))END ELSE BEGIN OO10 ^. NAME := '..';OO10 ^. SIZE := 0 ;OO10 ^. TIME :=
  278. $210000 ;OO10 ^. ATTR := DIRECTORY ;END ;O1lO110OOlI0 ^. INSERT (POBJECT (OO10 ));END ;END ;GETDRIVES (O10O0lIO0O01l );
  279. FOR OIOI := 'A'TO 'Z' DO IF (OIOI IN O10O0lIO0O01l )THEN BEGIN OO10 := MEMALLOC (SIZEOF (OO10 ^));IF (OO10 <> NIL )THEN
  280. BEGIN OO10 ^. NAME := OIOI + ':';OO10 ^. SIZE := 0 ;OO10 ^. TIME := $210000 ;OO10 ^. ATTR := DIRECTORY OR VOLUMEID ;
  281. O1lO110OOlI0 ^. ATINSERT (O1lO110OOlI0 ^. COUNT , POBJECT (OO10 ));END ;END ;IF (OO10 =NIL )THEN MESSAGEBOX
  282. ('Too many directories.', NIL , MFOKBUTTON + MFWARNING );NEWLIST (O1lO110OOlI0 );END ;
  283. PROCEDURE TBXFILEINPUTLINE.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT =EVBROADCAST
  284. )AND (EVENT.COMMAND =CMFILEFOCUSED )AND (STATE AND SFSELECTED =0 )THEN BEGIN IF (PSEARCHREC (EVENT.INFOPTR )^. ATTR AND
  285. DIRECTORY <> 0 )THEN DATA ^:= PSEARCHREC (EVENT.INFOPTR )^. NAME + '\'+ PFILEDIALOG (OWNER )^. WILDCARD ELSE DATA ^:=
  286. FEXPAND (PBXFILEDIALOG (OWNER )^. DIRECTORY ^)+ PSEARCHREC (EVENT.INFOPTR )^. NAME ;DRAWVIEW ;END ;END ;
  287. PROCEDURE TBXFILEINFOPANE.DRAW ;VAR OOllOI000O1l:WORD;O10OI110Il0II:ARRAY [ 0 .. 7 ]  OF LONGINT;OI111O0100ll:DATETIME;
  288. OIOO:STRING [ 5 ] ;OIIOIOII11I:STRING [ 60 ] ;OIOl01Il1Il:STRING [ 60 ] ;OIO1:TDRAWBUFFER;
  289. CONST O10Ol1OII1lO1='%-12s  %-9s  %02d/%02d/%4d  %02d:%02d%cm';O1O1ll1I1='%-12s  %-9d  %02d/%02d/%4d  %02d:%02d%cm';
  290. BEGIN OOllOI000O1l := GETCOLOR ($01 );MOVECHAR (OIO1 , ' ', OOllOI000O1l , SIZE.X );O10OI110Il0II [ 0 ] := LONGINT (@
  291. S.NAME );IF ((S.ATTR AND DIRECTORY )<> 0 )THEN BEGIN OIIOIOII11I := O10Ol1OII1lO1 ;OIOO := '<Dir>';O10OI110Il0II [ 1 ] :=
  292. LONGINT (@ OIOO );END ELSE BEGIN OIIOIOII11I := O1O1ll1I1 ;O10OI110Il0II [ 1 ] := S.SIZE ;END ;UNPACKTIME (S.TIME ,
  293. OI111O0100ll );O10OI110Il0II [ 2 ] := OI111O0100ll.MONTH ;O10OI110Il0II [ 3 ] := OI111O0100ll.DAY ;O10OI110Il0II [ 4 ] :=
  294. OI111O0100ll.YEAR ;IF (OI111O0100ll.HOUR >= 12 )THEN O10OI110Il0II [ 7 ] := BYTE ('p')ELSE O10OI110Il0II [ 7 ] := BYTE
  295. ('a');OI111O0100ll.HOUR := OI111O0100ll.HOUR MOD 12 ;IF (OI111O0100ll.HOUR =0 )THEN OI111O0100ll.HOUR := 12 ;
  296. O10OI110Il0II [ 5 ] := OI111O0100ll.HOUR ;O10OI110Il0II [ 6 ] := OI111O0100ll.MIN ;FORMATSTR (OIOl01Il1Il , OIIOIOII11I ,
  297. O10OI110Il0II );MOVESTR (OIO1 [ 1 ] , OIOl01Il1Il , OOllOI000O1l );WRITELINE (0 , 0 , SIZE.X , 1 , OIO1 );END ;
  298. CONSTRUCTOR TBXDIRECTORYINFOPANE.INIT (VAR BOUNDS:TRECT);BEGIN INHERITED INIT(BOUNDS );EVENTMASK := EVENTMASK OR
  299. EVBROADCAST ;END ;FUNCTION TBXDIRECTORYINFOPANE.GETPALETTE :PPALETTE ;CONST OO10:STRING [ LENGTH(CINFOPANE)] =CINFOPANE;
  300. BEGIN GETPALETTE := @ OO10 ;END ;PROCEDURE TBXDIRECTORYINFOPANE.HANDLEEVENT (VAR EVENT:TEVENT);
  301. BEGIN INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT =EVBROADCAST )AND (EVENT.COMMAND =CMFILEFOCUSED )THEN DRAWVIEW ;END ;
  302. PROCEDURE TBXDIRECTORYINFOPANE.DRAW ;VAR OIO1:TDRAWBUFFER;OOllOI000O1l:WORD;OIlIl0O0O00:PATHSTR;BEGIN OIlIl0O0O00 :=
  303. FEXPAND (PBXFILEDIALOG (OWNER )^. DIRECTORY ^);OOllOI000O1l := GETCOLOR ($01 );MOVECHAR (OIO1 , ' ', OOllOI000O1l ,
  304. SIZE.X );MOVESTR (OIO1 [ 1 ] , OIlIl0O0O00 , OOllOI000O1l );WRITELINE (0 , 0 , SIZE.X , 1 , OIO1 );END ;
  305. CONSTRUCTOR TBXFILEDIALOG.INIT (AWILDCARD:TWILDSTR;ATITLE:STRING ;INPUTNAME:STRING ;AOPTIONS:WORD;HISTORYID:BYTE);
  306. VAR OO1000011:PVIEW;OO1I:TRECT;OO1O:STRING ;OIl0OO0lO1O:WORD;OOO101ll0OO1:PATHSTR;BEGIN OO1I.ASSIGN (0 , 0 , 49 , 18 );
  307. TDIALOG.INIT (OO1I , ATITLE );OPTIONS := OPTIONS OR OFCENTERED ;WILDCARD := AWILDCARD ;OO1I.ASSIGN (2 , 2 , 31 , 3 );
  308. FILENAME := NEW (PBXFILEINPUTLINE , INIT (OO1I , 79 ));FILENAME ^. DATA ^:= WILDCARD ;INSERT (FILENAME );OO1I.ASSIGN (2 ,
  309. 1 , 3 + CSTRLEN (INPUTNAME ), 2 );OO1000011 := NEW (PLABEL , INIT (OO1I , INPUTNAME , FILENAME ));INSERT (OO1000011 );
  310. OO1I.ASSIGN (31 , 2 , 34 , 3 );OO1000011 := NEW (PHISTORY , INIT (OO1I , FILENAME , HISTORYID ));INSERT (OO1000011 );
  311. OO1I.ASSIGN (16 , 6 , 17 , 16 );OO1000011 := NEW (PSCROLLBAR , INIT (OO1I ));INSERT (OO1000011 );OO1I.ASSIGN (2 , 6 , 16
  312. , 16 );FILELIST := NEW (PBXFILELIST , INIT (OO1I , WILDCARD , PSCROLLBAR (OO1000011 )));INSERT (FILELIST );OO1I.ASSIGN (2
  313. , 5 , 8 , 6 );OO1000011 := NEW (PLABEL , INIT (OO1I , '~F~iles', FILELIST ));INSERT (OO1000011 );OO1I.ASSIGN (32 , 6 , 33
  314. , 16 );OO1000011 := NEW (PSCROLLBAR , INIT (OO1I ));INSERT (OO1000011 );OO1I.ASSIGN (18 , 6 , 32 , 16 );DRIVELIST := NEW
  315. (PBXDRIVELIST , INIT (OO1I , PSCROLLBAR (OO1000011 )));INSERT (DRIVELIST );OO1I.ASSIGN (18 , 5 , 30 , 6 );OO1000011 :=
  316. NEW (PLABEL , INIT (OO1I , '~D~irectories', DRIVELIST ));INSERT (OO1000011 );OO1I.ASSIGN (35 , 2 , 46 , 4 );OIl0OO0lO1O
  317. := BFDEFAULT ;IF AOPTIONS AND FDOPENBUTTON <> 0 THEN BEGIN INSERT (NEW (PBUTTON , INIT (OO1I , '~O~pen', CMFILEOPEN ,
  318. OIl0OO0lO1O )));OIl0OO0lO1O := BFNORMAL ;INC (OO1I.A.Y , 3 );INC (OO1I.B.Y , 3 );END ;IF AOPTIONS AND FDOKBUTTON <> 0
  319. THEN BEGIN INSERT (NEW (PBUTTON , INIT (OO1I , 'O~K~', CMFILEOPEN , OIl0OO0lO1O )));OIl0OO0lO1O := BFNORMAL ;INC
  320. (OO1I.A.Y , 3 );INC (OO1I.B.Y , 3 );END ;IF AOPTIONS AND FDREPLACEBUTTON <> 0 THEN BEGIN INSERT (NEW (PBUTTON , INIT
  321. (OO1I , '~R~eplace', CMFILEREPLACE , OIl0OO0lO1O )));OIl0OO0lO1O := BFNORMAL ;INC (OO1I.A.Y , 3 );INC (OO1I.B.Y , 3 );
  322. END ;IF AOPTIONS AND FDCLEARBUTTON <> 0 THEN BEGIN INSERT (NEW (PBUTTON , INIT (OO1I , '~C~lear', CMFILECLEAR ,
  323. OIl0OO0lO1O )));OIl0OO0lO1O := BFNORMAL ;INC (OO1I.A.Y , 3 );INC (OO1I.B.Y , 3 );END ;INSERT (NEW (PBUTTON , INIT (OO1I ,
  324. 'Cancel', CMCANCEL , BFNORMAL )));INC (OO1I.A.Y , 3 );INC (OO1I.B.Y , 3 );IF AOPTIONS AND FDHELPBUTTON <> 0 THEN
  325. BEGIN INSERT (NEW (PBUTTON , INIT (OO1I , 'Help', CMHELP , BFNORMAL )));INC (OO1I.A.Y , 3 );INC (OO1I.B.Y , 3 );END ;
  326. OO1I.ASSIGN (2 , 4 , 31 , 5 );OO1000011 := NEW (PBXDIRECTORYINFOPANE , INIT (OO1I ));INSERT (OO1000011 );OO1I.ASSIGN (3 ,
  327. 3 , 12 , 4 );OO1000011 := NEW (PSTATICTEXT , INIT (OO1I , 'Directory'));INSERT (OO1000011 );OO1I.ASSIGN (2 , SIZE.Y - 2 ,
  328. SIZE.X - 2 , SIZE.Y - 1 );OO1000011 := NEW (PBXFILEINFOPANE , INIT (OO1I ));INSERT (OO1000011 );SELECTNEXT (FALSE );IF
  329. ((AOPTIONS AND FDNOLOADDIR )=0 )THEN READDIRECTORY ;END ;{$ENDIF} PROCEDURE REGISTERTVDIALOG ;BEGIN REGISTERTYPE
  330. (RBXRUNDIALOG );REGISTERTYPE (RBXPERCENTDIALOG );REGISTERTYPE (RBXPRINTDIALOG );REGISTERTYPE (RBXLINKEDLINE );
  331. REGISTERTYPE (RBXLINKEDBOX );REGISTERTYPE (RBXLISTBOX );REGISTERTYPE (RBXVLISTBOX );REGISTERTYPE (RBXCHECKLISTBOX );
  332. REGISTERTYPE (RBXPAIREDLISTBOX );REGISTERTYPE (RBXPAIREDSTRLISTBOX );REGISTERTYPE (RBXVLISTBOX );
  333. {$IFDEF USE_NEW_FILE_DIALOG} REGISTERTYPE (RBXFILECOLLECTION );REGISTERTYPE (RBXFILELIST );REGISTERTYPE (RBXDRIVELIST );
  334. REGISTERTYPE (RBXFILEINPUTLINE );REGISTERTYPE (RBXFILEINFOPANE );REGISTERTYPE (RBXDIRECTORYINFOPANE );REGISTERTYPE
  335. (RBXFILEDIALOG );{$ENDIF} END ;END .
  336.